热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Java|赋值操作符的注意事项

一、赋值操作赋值操作的操作顺序是从右到左先计算赋值操作符右边的公式,在赋值给左边变量二、先运算,再赋值即自加i2;等同于ii2;其他的-,*,,

一、赋值操作

赋值操作的操作顺序是从右到左

先计算赋值操作符右边的公式,在赋值给左边变量

二、先运算,再赋值

+=即自加
i+=2;
等同于
i=i+2;

其他的 -= , *= , /= , %= , &= , |= , ^= , >>= , >>>= 都是类似,不做赘述

三、问题研究


1、i的最终结果是?

int i = 1;
i+=++i;

2、结果

3

3、错误答案及原因:

4,因为误会是2+=2了。

4、原因分析


int i = 1; i+=++i; 理解 就是 i = i + ++i

解析:抛开静态情况。栈帧存储了方法的局部变量表,操作数栈,动态连接和方法返回地址等信息。

首先代码执行过程是:

0: iconst_1 将常量1压入操作数栈。此时栈顶值为1.

1: istore_1 将栈顶元素弹出(值1),存入到局部变量表index为1的位置。这里一般index为0的位置存储的是当前实例。想象下局部变量结构【当前实例,1】

2: iload_1 将局部变量表index的位置值复制一份到操作数栈。栈顶值为1

3: iinc 1, 1 iinc就是进行自增操作 第一个1是操作局部变量表index为1的值,第二个值表示增加的数量 ,也就是++i 等价于i = i+1;1+1=2.把结果存放到局部变量表index为1里面

4: iload_1 将局部变量index为1的值(此刻为2) 存一份到操作数栈。此时操作栈存了 之前的1 和这次的2

5: iadd 这个命令是将操作栈里前俩个值相加 1+2 =3 ,把结果放在栈顶

6: istore_1 将栈顶元素弹出(值3) 存到局部变量index为1的位置 也就是i = 3


推荐阅读
author-avatar
TT0852_235
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有